package main

import (
	"database/sql"
	"fmt"
	"log"
	"time"

	_ "github.com/go-sql-driver/mysql"
	"github.com/huandu/go-sqlbuilder"
)

var db *sql.DB

type Emp struct { // 和字段对应的变量或结构体定义，最好和数据库中字段顺序对应
	emp_no     int
	birth_date string
	first_name string
	last_name  string
	gender     int16
	hire_date  string
}

func main() {
	var err error
	db, err = sql.Open("mysql", "jin:jin@tcp(localhost:3306)/test")
	if err != nil {
		log.Fatal(err)
	}
	// 参看README.md https://github.com/go-sql-driver/mysql#usage
	db.SetConnMaxLifetime(time.Second * 30) // 超时时间
	db.SetMaxOpenConns(200)                 // 设置最大连接数，默认为0表示不限制
	db.SetMaxIdleConns(10)                  // 设置空闲连接数
	query := sqlbuilder.Select("emp_no", "first_name", "last_name",
		"gender", "birth_date").
		From("employees").
		Where("emp_no > ?"). // 试一试Where("emp_no > ?")
		Offset(2).Limit(2).
		OrderBy("emp_no").Desc(). // 按照什么字段排序，降序
		String()
	fmt.Println(query)
	rows, err := db.Query(query, 10015)
	if err != nil {
		log.Fatalln(err)
	}
	for rows.Next() {
		var e Emp
		// 要和上面select的字段顺序对应
		rows.Scan(&e.emp_no, &e.first_name, &e.last_name, &e.gender,
			&e.birth_date)
		fmt.Println(e)
	}
}
